
namespace FastFood.Business.Logic
{
	using System;
	using System.Collections.Generic;
	using EDOSwit.Entity;
	using FastFood.Business.Entities;
	using FastFood.DataAccess;
    using System.Linq;

	/// <summary>
	/// Represents the Manager of Correlativos.
	/// </summary>
	[Serializable]
	public class CorrelativosManager : Singleton<CorrelativosManager>
	{
		#region Methods

		/// <summary>
		/// Selects all records from the Correlativos table.
		/// </summary>
		public IList<Correlativos> Listar()
		{
			try
			{
                return CorrelativosData.Instancia.Listar().Reverse().ToList();
			}
			catch (Exception) { throw; }
        }

        /// <summary>
        /// Selects all records from the Correlativos table.
        /// </summary>
        public IList<Correlativos> ListarActivos()
        {
            try
            {
                return CorrelativosData.Instancia.ListarActivos().Reverse().ToList();
            }
            catch (Exception) { throw; }
        }

        /// <summary>
        /// Selects all records from the Correlativos table.
        /// </summary>
        public IList<Correlativos> ListarByTipoDocumento(byte tipoDocumento)
        {
            try
            {
                return CorrelativosData.Instancia.ListarByTipoDocumento(tipoDocumento).Reverse().ToList();
            }
            catch (Exception) { throw; }
        }

        /// <summary>
        /// Selects all records from the Correlativos table.
        /// </summary>
        public Correlativos ObtenerActivoByTipoDocumento(byte tipoDocumento)
        {
            try
            {
                return CorrelativosData.Instancia.ObtenerActivoByTipoDocumento(tipoDocumento);
            }
            catch (Exception) { throw; }
        }

		/// <summary>
		/// Selects a single record from the Correlativos table.
		/// </summary>
		public Correlativos Obtener(int correlativoID)
		{
			try
			{
				return CorrelativosData.Instancia.Obtener(correlativoID);
			}
			catch (Exception) { throw; }
		}

		/// <summary>
		/// Saves a record to the Correlativos table.
		/// </summary>
		public int Agregar(Correlativos correlativos)
		{
			try
			{
				return CorrelativosData.Instancia.Agregar(correlativos);
			}
			catch (Exception) { throw; }
		}

		/// <summary>
		/// Updates a record in the Correlativos table.
		/// </summary>
		public bool Modificar(Correlativos correlativos)
		{
			try
			{
				return CorrelativosData.Instancia.Modificar(correlativos);
			}
			catch (Exception) { throw; }
		}

		/// <summary>
		/// Deletes a record from the Correlativos table by its primary key.
		/// </summary>
		public bool Eliminar(int correlativoID)
		{
			try
			{
				return CorrelativosData.Instancia.Eliminar(correlativoID);
			}
			catch (Exception) { throw; }
		}

        public bool ExisteSerie(int correlativoID, byte tipoDocumento, string serie)
        {
            try
            {
                Correlativos correlativo = CorrelativosData.Instancia.ObtenerByTipoAndSerie(tipoDocumento, serie);
                if (correlativo != null)
                {
                    if (correlativo.correlativoID != correlativoID) return true;
                }
                return false;
            }
            catch (Exception) { throw; }
        }

        public bool ExisteInterseccion(int correlativoID, byte tipoDocumento, int numeroInicio, int numeroFinal)
        {
            try
            {
                IList<Correlativos> coleccion = CorrelativosData.Instancia.ListarEntreNumeros(tipoDocumento, numeroInicio, numeroFinal);
                if (coleccion.Count > 1) return true;
                if (coleccion.Count == 1)
                {
                    if (coleccion[0].correlativoID != correlativoID) return true;
                }
                return false;
            }
            catch (Exception) { throw; }
        }

		#endregion
	}
}
